// 先引用路由
const express = require("express");
const router = express.Router();
// 引入模型文件
const { Gg_user } = require("../models");
// 引入 Op
const { Op } = require("sequelize");
// 引入定义的异常类
const {
  NotFoundError,
  getArticle,
  success,
  failure,
} = require("../utils/utils_function.js");

// 返回全部数据
router.get("/alldata", async function (req, res, next) {
  try {
    // 获取全部的数据
    const userInfo = await Gg_user.findAll();

    success(res, "查询全部用户成功!", userInfo);
  } catch (error) {
    failure(res, error);
  }
});

// 获取标题全部的数据
router.get("/", async function (req, res, next) {
  try {
    // 获取用户query传递来的参数
    const query = req.query;

    // 通过 user_name 查询数据 -- 这个写法失败了
    // const condition = {
    //   where: ["user_name", query.user_name],
    // };

    // 返回找到的数据
    const userInfo = await Gg_user.findOne({
      where: { user_name: query.user_name },
    });

    success(res, "查询用户成功!", userInfo);
  } catch (error) {
    failure(res, error);
  }
});

// 添加用户数据
router.post("/", async function (req, res, next) {
  try {
    // 解构用户传参
    const insertData = {
      user_name: req.body.user_name,
      user_password: req.body.user_password,
    };

    // 执行写入
    const userInfo = await Gg_user.create(insertData);

    // 返回写入的数据
    success(res, "添加用户成功!", userInfo, 201);
  } catch (error) {
    failure(res, error);
  }
});

// 登录状态修改
router.put("/cgStatus", async function (req, res, next) {
  try {
    // 解构用户传参
    const updateInfo = {
      id: req.body.id,
      user_onlinestatus: req.body.user_onlinestatus,
    };

    // 根据id查找事件
    const userInfo = await Gg_user.findByPk(updateInfo.id);

    // 执行状态修改
    await userInfo.update({
      user_onlinestatus: updateInfo.user_onlinestatus,
    });

    // 返回写入的数据
    success(res, "用户登录状态 修改成功!", userInfo);
  } catch (error) {
    failure(res, error);
  }
});

// 修改用户名和密码
router.put("/cgUser", async function (req, res, next) {
  try {
    // 解构用户传参
    const updateInfo = {
      id: req.body.id,
      user_name: req.body.user_name,
      user_password: req.body.user_password,
    };

    // 根据id查找事件
    const userInfo = await Gg_user.findByPk(updateInfo.id);

    // 执行状态修改
    await userInfo.update({
      user_name: updateInfo.user_name,
      user_password: updateInfo.user_password,
    });

    // 返回写入的数据
    success(res, "用户账户密码 修改成功!", userInfo, 201);
  } catch (error) {
    failure(res, error);
  }
});

// 用户删除
router.delete("/", async function (req, res, next) {
  try {
    const { id } = req.body;
    // 通过主键搜素出数据
    const userInfo = await Gg_user.findByPk(id);

    // 如果存在的话 -- 删除数据
    if (userInfo) {
      // 使用 deatroy 替代 sql -- delete from where
      await userInfo.destroy();
      success(res, "删除用户成功!", userInfo);
    } 
  } catch (error) {
    failure(res, error);
  }
});

// 导出路由
module.exports = router;
